[10] 虛擬環境建置


Posted by bessyhuang on 2023-06-19

虛擬環境

簡介

虛擬環境(Virtual Environment)
在 Python 中, 虛擬環境 是一個獨立的資料夾,並且裡面裝好了特定版本的 Python,以及一系列相關的 套件

  • 優點:
    • 你的專案會擁有一個專屬的獨立 Python 環境。
    • 不需要 root 權限,就可以安裝新套件。
    • 方便控管不同版本的套件,不用擔心升級套件會影響到其他專案。
    • 如果需要多人協作或在不同機器上跑同一個專案時,使用虛擬環境也可以確保環境一致性。
  • 注意:
    • 假如 Project / Application B 需要某個 package 升級到 version=3.0,也不會影響到 Project / Application A 的環境。
    • 當你不需要虛擬環境時,直接刪除 虛擬環境的資料夾 即可。

為何需要虛擬環境?

  • 情境:一台電腦需要使用 相同套件但不同版本 的時候
    • Project / Application A 需要 package C(version=1.0)
    • Project / Application B 需要 package C(version=2.0)
    • 安裝 package C 在同一台電腦上,則不管安裝 1.0 或是 2.0 都會衝突,以致於其中一個 Project / Application 無法使用。
  • 解決方案
    • 針對每個 Project / Application,各別創建『 虛擬環境(完全獨立且隔離的運行環境) 』來使用,避免干擾到同一系統上運行的其他 Project / Application。
      • 意即
        • Project / Application A 創建一個虛擬環境來安裝 package C(version=1.0)
        • Project / Application B 創建一個虛擬環境來安裝 package C(version=2.0)

pip 套件管理工具

從 Python 3.4 開始,它被預設包含在 Python 二進制安裝程式中。
  • 在安裝套件之前,請先確認是否已安裝 套件管理工具(Package Manager),如:pip。
  • 套件管理工具(Package Manager)
    • 如 pip、npm、yarn、apt-get 等,用來讓你更加『 方便 』安裝、刪除、升級原有系統或開發語言 所缺少的第三方工具。
  • PyPI(Python 官方第三方軟體倉儲, The Python Package Index)
    • 如果用生活的例子來比喻,就像 Android 手機,有 google play 可以安裝軟體。Iphone 有 app store 來安裝軟體。在這之中 PyPI 就像是 google play 或是 app store。
    • 在我們使用 pip 安裝套件的時候,下指令 pip install 套件名稱 預設就是從 PyPI 下載套件。

用於建置虛擬環境的 Python 套件

💡 venv 套件:
用來建立與管理虛擬環境的套件。venv 通常會安裝你能夠取得的最新版本的 Python。
不需要安裝。

💡 virtualenv 套件:
用來建立與管理虛擬環境的套件。venv 通常會安裝你能夠取得的最新版本的 Python。
需要安裝:pip install virtualenv

建置步驟

Step 1: 建立專案資料夾

$ mkdir 自訂資料夾名稱
$ cd 自訂資料夾名稱

Step 2: 在專案資料夾內,建立 python3 虛擬環境

💡 注意!
虛擬環境建立後,千萬不要對虛擬環境目錄進行任何更名/搬動/複製 (任何影響到虛擬環境的絕對路徑的活動都不行)。

搬動它,會使你的虛擬環境錯亂;
複製它,複製出來的虛擬環境還是和原來的相關, 而不是獨立的一份。

這是因為目前 venv 在產生 activate.bat(批次檔 = Batch) 時,是將虛擬環境的路徑直接寫死在檔案裡。

註:
Windows 批次檔 (batch):
是一種用來當成手稿語言運作程式的檔案。它本身是文字文件,`其中包含了一系列讓具備命令列介面的直譯器讀取並執行的指令`,副檔名為 bat。
簡單來說就是一個 `操控 windows 的程式`。
  • 建立 python3 虛擬環境,兩種方式:

    • 方式一:使用 venv 套件

        #MacOS
        $ python3 -m venv 自訂虛擬環境名稱
      
        #Windows
        $ python -m venv 自訂虛擬環境名稱
      
    • 方式二:使用 virtualenv 套件

        #MacOS
        $ pip3 install virtualenv
        $ virtualenv 自訂虛擬環境名稱
      
        #Windows
        $ pip install virtualenv
        $ virtualenv 自訂虛擬環境名稱
      
    • 安裝不同 Python 版本的虛擬環境

        $ where python3.11
        /usr/local/bin/python3.11
      
        $ virtualenv 自訂虛擬環境名稱 -p "python 資料夾路徑"
        $ virtualenv MyVenv -p "/usr/local/bin/python3.11"
      
  • 預期的目錄架構

      ~/Downloads » tree project_demo -L 2
    
      project_demo
      └── MyVenv
          ├── bin
          ├── include
          ├── lib
          └── pyvenv.cfg
    

Step 3: 啟動虛擬環境

#MacOS
$ source 自訂虛擬環境名稱/bin/activate

#Windows
$ 自訂虛擬環境名稱\Scripts\activate.bat
  • 啟動虛擬環境,長怎樣呢?
    • 出現 (自訂虛擬環境名稱) → 啟動虛擬環境 成功
    • Linux / MacOS
        (自訂虛擬環境名稱) $
      
    • Windows
        (自訂虛擬環境名稱) C:\>
      

Step 4: 在虛擬環境內,安裝任何需要的套件

$ pip install 套件名稱

Step 5: 關閉虛擬環境

  • Linux / MacOS
      $ deactivate
    
  • Windows
      $ 自訂虛擬環境名稱\Scripts\deactivate
      $ deactivate
    
  • 關閉虛擬環境,長怎樣呢?
    • (自訂虛擬環境名稱) 消失了~ → 關閉虛擬環境 成功
    • Linux / MacOS
        $
      
    • Windows
        C:\>
      

pip 套件管理工具 的常用指令

  • 若為 Linux / MacOS 且 不在虛擬環境內 安裝套件,則 pip 安裝指令應改為 pip3 install 套件名稱;反之,若為 Linux / MacOS 且 在虛擬環境內 安裝套件,則 pip 安裝指令為 pip install 套件名稱
  • 若為 Windows,在安裝套件時 不論是否在虛擬環境內,pip 安裝指令為 pip install 套件名稱

查詢 pip 版本

$ pip -V

安裝套件

$ pip install 套件名稱
$ pip install 套件名稱==某個特定版本

e.g. `pip install Django==1.9.10`

升級套件

$ pip install 套件名稱 --upgrade

解除安裝 / 刪除 套件

$ pip uninstall 套件名稱

顯示虛擬環境中所有已經安裝的套件(shows ALL installed packages.)

$ pip list

顯示一個特定套件的資訊

$ pip show 套件名稱

匯出已安裝的套件

$ pip freeze > requirements.txt

讀取 requirements.txt 還原虛擬環境

$ rm -r MyVenv
$ python3 -m venv NewVenv
$ source NewVenv/bin/activate

$ pip install -r requirements.txt

References

  1. 【 Python 教學 】什麼是 PyPI?跟 pip 又有什麼關係呢?
  2. 使用 Python 虛擬環境

#Python #Virtual Env #pip







Related Posts

AI輔導室|製作米其林星星

AI輔導室|製作米其林星星

W12_API 自己做 [ BE101 ] 實作之二

W12_API 自己做 [ BE101 ] 實作之二

「三元運算子」不好嗎?

「三元運算子」不好嗎?


Comments